论文推荐|BDN:一种利用顺序无关定位盒分解的任意方向场景文本检测方法(附Pytorch开源代码)
本文简要介绍发表在IJCAI2019的论文“Omni-directional Scene Text Detection with Sequential-free BoxDiscretization”主要工作,如图1所示。其提出了一种面向全方向场景文本的检测模型BDN(Box Discretization Network),解决了四边形文本检测的顺序歧义问题。BDN通过找寻顺序无关的不动点进而将检测的包围盒分解为多个顺序无关的关键边界,并对关键边界的匹配类型进行学习进而彻底解决顶点顺序所带来的歧义。通过对关键边界的预测,BDN能够弥补Mask R-CNN基准模型一些缺陷,进而对召回和精度均产生了实质性地提高。此外,衍生的关键边界的分数是对位置敏感的一个置信度,通过利用它与原本的分类精度进行加权可以进一步提高模型的性能。论文相关代码已开源,下载链接见文末。
近年来的研究进展表明,四边形包围盒(BoundingBox)是场景文字检测里面非常重要的一个检测方式,但是目前的方法存在一些缺陷。基于分割的方法通常需要额外的步骤来将像素组合成旋转矩形,一方面旋转矩形没法比四边形包围盒检测得更紧密,另一方面这种像素组合的方法通常对于噪声像素比较敏感,错误预测的部分像素可能极大地影响整个组合的结果。而非分割的方法通常都无法避免一个与标注顺序敏感(Sensitive to Label Sequence, SLS)的问题。什么是SLS?如图2所示:大部分包围盒的方法通常需要特定的特征图来学习特定的点、或某条边、或者到某条边的距离等等。一旦顺序产生改变,即使是同样的图片同样的网络,特征图的对应关系依然会彻底地发生改变,这种对应关系的剧变可能会产生学习的时候的混淆,导致产生浓缩框的情况,这很可能是网络在混淆的时候为了折中损失产生的结果。
事实上这个问题在实验中发现它确实会潜在地影响最终的性能,而这个问题在过去并没有引起足够的重视。以前的解决方法通常是提供一个顺序协议来处理标注点的顺序,但是这种协议通常都是不完美的,还是会存在一个像素的偏差就导致顺序的完全改变。例如图3的方法来自Textboxes++(TIP 2018),他的处理方法是,给定四个点,首先找到均值中心,根据中心建立水平直角坐标系,从x轴正半轴开始,逆时针夹角最小的点作为第一个点,依次决定所有的其他的点。但是如果第一个点刚好在正半轴上,这个点如果向下偏移一个像素它就立马变成了第四个点,这就导致了整个标注顺序发生了改变。
图4的方法来自DMPNet(CVPR 2017),他的处理方法是,给定四个点,先找到x坐标最小的点为第一个点(如果有两个最小的x就取y比较小的作为第一个点),然后连接其余三点,找到中间斜率的点作为第三个点,由顺时针易推第二和第四个点,之后,通过连接对角线,选定大斜率的对角线的x较小的一端作为第一个点,同样的方法得到其他的三个点作为最终的结果。但是,这种基于斜率的方法,如果对角线在垂直线上,左边是负无穷,右边是正无穷,一个像素的偏差依然会导致整个点的顺序发生改变。
图5的方法来自QRN(ACM MM 2018),他的方法是给定四个点找到外接水平矩形,通过矩形的四个顶点与四边形的四个点算距离,离右上角最近距离的作为第一个点,依次得到第二第三和第四个点。但是,举个例子,如果这个四边形是一个正菱形◇的形状,顺时针或者逆时针转动一个像素同样会导致整个点的顺序发生改变。
事实上,这些由“1个像素”产生的不稳定的情况在通用数据集里面看似比较不常见,而这也是SLS的方法依然能够表现出不错的性能的原因。但是在本文的实验中发现,一旦通过增加旋转伪样本,这种不稳定情况带来的弊端就可以被明显放大。
为了解决这个问题,一个直观的思路就是首先找到一些顺序无关的不动点,例如均值中心M,Mx =(∑x)/4,My =(∑y)/4。显然M的坐标值不会因为坐标顺序的改变而发生变化。所以,如果找到4个这样的不动点,我们就能够通过参数方程反解出四个顶点的坐标值。当然参数化的形式不应该太复杂,所以这篇文章将参数化形式简化为了关键边(Key Edge,KE))。KE代表着四个顶点的八个坐标值,如图6所示。它将每个坐标点的x和y分解开来单独讨论,这样不论点的标注顺序是怎样的,KE都始终不会发生改变,如下的右图所示。所以解决顺序的问题就可以简化为直接对KE进行求解了。
BDN基于Mask R-CNN框架来设计,对于KE的求解是通过增加一个head来实现的,整体框架如图7所示。
其中KE head的主要架构如图8所示。
对KE的求解是通过分开x和y进行单独求解的,对于每个ti(t可以是任意的x或者y), 通过卷积将特征图变换到长条状,进而通过SoftMax学习最可能是当前KE的像素点位置。通过观察,我们通过这样的分类而不是以前的回归的方式去解决定位的问题事实上会使得定位的结果更加紧密和准确。
一个问题是,由于有RPN的机制,求解会被局限在RoI的区域特征里面,而原本的KE例如min和max的坐标值都在文本边缘,这样在初始训练的时候RoI很可能没有包含到相应的KE,对这种情况是不会对对应的KE进行学习的,因此就没有loss的回传。为了缓解这种情况,文章的做法是做一个简单的参数变换,其中tmean代表均值中心的坐标值,对每个KE ti实际上学习的是tihalf。学习tihalf还有一个好处是,虽然预测是在ROI的区域内的,但是在解码时反解回去时,我们在可视化发现,预测的KE甚至能够超出ROI的区域,使得其有更好的灵活性(eg. 解决传统BoundingBox方法检测框不完整的问题。)
还有一个问题是,在预测得到KE之后,我们得到了所有的x和y值,但是我们并不知道哪些x和哪些y应该组合在一起成为一个点的,而且一旦组合错误即便KE预测正确结果都会很不好。四个x和四个y的匹配一共有24种组合方法,实际上,每个输入的GT框我们做KE分解的时候我们顺带把原本x和y的匹配类型记录了下来,例如如果xmin匹配ymin, x2匹配y2, x3匹配y3,xmax匹配ymax,就记为1234,并且给这种匹配情况分配类别0,以此类推。
图10
在实验中我们发现,对于一些mask branch无法避免的误检测,匹配类型往往会预测一个不规则的形状(边与边有交叉),此时可以直接对不规则的框直接抑制提高模型的精度。如图11的绿框是由mask组合成的框。
另一方面,有时候proposal预测出来是准确的,但是mask branch可能会预测不出对应的文本框,而KE的预测依然还是准确的,如图12用多颜色的点简化表示的框。所以模型的召回也能在一定程度上得到提高。
此外,由于原本由box branch得到的分数只是一个分类的置信度,这个分数只是分类是不是文本框,对框的准确位置并没有直接进行感知。而KE的分数是对四边形定位框的准确位置进行监督学习的,所以可以利用KE的分数与分类的置信度进行一个加权进行rescoring。
图13
我们对KE的分数进行了可视化,一个比较有趣的发现是对于一些准确的预测框,KE的分数的预测分布通常都是normal case的只有一个峰顶情况,而误检测的框通常都会有不止一个峰顶的预测结果。
消融实验的结果如下。我们的方法能够显著改善Mask R-CNN的性能,而且能够有效地解决LC的问题。
我们的方法在几个常用数据集均取得了当时最好的结果(本文方法没有做多尺度测试,也未利用识别信息辅助)。
图16
Match type learning在训练中很快就收敛,是一个很简单的任务,所以loss weight不能设置太高,此外为了避免类别不均衡,在训练的时候,可以适量增加一些旋转伪样本。虽然本文是基于两阶段的方法,但是所提出的所有组件都可以移植到单阶段的方法,例如East不再预测点到边的距离而是预测点到KE的距离,使其变为一个包围盒顺序无关的预测方法。此外,值得一提的是今年ICDAR 2019 Robust Reading ReCTS夺冠的检测方法就是以BDN为基准框架来设计的。这个方法目前已经能够泛化到曲线的数据集上(未来将择机对相关方法进行开源。)
论文:https://www.ijcai.org/proceedings/2019/423https://arxiv.org/abs/1906.02371 代码地址:https://github.com/Yuliang-Liu/Box_Discretization_Network
免责声明:(1)本文仅代表撰稿者观点,个人理解及总结不一定准确及全面,论文完整思想及论点应以原论文为准。(2)本文观点不代表本公众号立场。
征稿启事:本公众号将不定期推选一些文档图像分析与识别的论文进行介绍,欢迎自荐或推荐此领域最新论文成果给本公众号审阅编排后发布。请发Word版的论文图文介绍材料到:xuegao@scut.edu.cn
(扫描如上二维码加关注)